package com.woniuxy.creditsystem.systemmag.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

/**
 *文件上传、下载的关键程序
 *  需要在spring-mvc.xml中进行配置
 * @author hejie
 *
 */
@RequestMapping("files")
@Controller
public class FileController {

    //从application.properties中获取poi的excel文件存放路径
    @Value("${poiFilePath}")
    private String poiFilePath;

    /**
     * 文件的下载（浏览器下载文件）
     * @author hejie
     * @param fileName
     * @param userAgent
     * @return  设置响应的实体对象，由于我们返回的是图片，所以我们以字节的方式返回。
     */
    @RequestMapping("/download")
    public ResponseEntity<byte[]> download(String fileName,
                                           @RequestHeader("User-Agent")String userAgent){
//        String filePath="D://poiFiles"+File.separator+fileName;
        String filePath=poiFilePath + File.separator + fileName;
        File file=new File(filePath);
        if (file.exists()){
            try{
                //构建一个响应状态码 200
                ResponseEntity.BodyBuilder builder = ResponseEntity.ok();
                //设置文件的长度
                builder.contentLength(file.length());
                //告诉前端，后端现在给你的数据类型是：二进制流
                builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
                fileName = URLEncoder.encode(fileName, "UTF-8");
                //判断浏览器是否是IE浏览器
                if(userAgent.indexOf("MSIE") > 0) {
                    builder.header("Content-Disposition", "attachment; filename=" + fileName);
                }else {
                    builder.header("Content-Disposition", "attacher; filename*=UTF-8''" + fileName);
                }

                //通过FileUtils工具类，读取文件到 响应体中
                return builder.body(FileUtils.readFileToByteArray(file));
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //文件不存在时，返回null
        return null;
    }


    /**
     * 文件上传
     * @author hejie
     * @param file
     * @param fileDesc
     * @return
     */
    @PostMapping(value = "/upload")  //路径是files/upload
    public String upload(@RequestParam("file01") MultipartFile file, String fileDesc) {
        String originalFileName = file.getOriginalFilename();
        System.out.println("Filename="+file.getOriginalFilename());
        System.out.println("fileDesc="+fileDesc);

        //如果有文件服务器，则将文件上传至 FTP文件服务器

        //如果没有文件服务器，就将giant文件持久化到本地磁盘中去
        String path="G://files";
        File file1=new File(path);
        if (!file1.exists()) {
            file1.mkdir();
        }
        //向文件夹 写入文件
        String filePath= path+File.separator +originalFileName;
        try {
            //底层是IO流的写入
            file.transferTo(new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "file/file_download";
    }
}
